今天介紹的是工廠模式,因為會跟明天的 Abstract Factory 有點關係,所以先來說一下,這個工廠模式,相對我們前幾天談到的其他模式都還要單純很多,也很好懂,就是建立一個 Factory 類別,裡面有個方法會去回傳實例,而回傳的實例們都是去實作同一個介面。
提供一個工廠介面,將產生實體的程式碼交由子類別各自實現。
(圖片來源:https://www.tutorialspoint.com/design_pattern/images/factory_pattern_uml_diagram.jpg)
(參考自:https://www.tutorialspoint.com/design_pattern/factory_pattern.htm)
using System;
using System.Collections.Generic;
using System.Text;
namespace DAY11_Factory
{
internal class Program
{
static void Main(string[] args)
{
// 建立工廠
ShapeFactory shapeFactory = new ShapeFactory();
// 透過不同參數指定回傳不同實體回來
IShape shape1 = shapeFactory.GetShape("Circle");
shape1.Draw();
IShape shape2 = shapeFactory.GetShape("Rectangle");
shape2.Draw();
IShape shape3 = shapeFactory.GetShape("Square");
shape3.Draw();
Console.ReadLine();
}
}
public class ShapeFactory
{
public IShape GetShape(string shapeType)
{
if (shapeType == null)
{
return null;
}
Type type = Type.GetType($"DAY11_Factory.{shapeType}");
return (IShape)Activator.CreateInstance(type);
}
}
public interface IShape
{
void Draw();
}
public class Rectangle : IShape
{
public void Draw()
{
Console.WriteLine("長方形畫好了!");
}
}
public class Circle : IShape
{
public void Draw()
{
Console.WriteLine("圓形畫好了!");
}
}
public class Square : IShape
{
public void Draw()
{
Console.WriteLine("正方形畫好了!");
}
}
}
如果從UML圖來看的話,Factory模式跟 Strategy模式長的其實差不多,結構很類似,但實際上用法是不同的,Factory模式是根據定義將物件回傳,而Strategy模式則是聚集了物件,並且去實現該物件所具有的行為。
我們明天再來看看更高級的工廠吧~